import coordtransform from "coordtransform";
let map: any = null;
let result = {
  lat: null,
  lng: null,
  address: "",
};
const state = reactive<any>({
  markerLayer: "",
  marker: null,
  infoWindow: null,
  value: 1,
});
/**
 * 添加点标记
 * @param data data
 */
const addImgMarker = (data: any) => {
  state.marker = new TMap.MultiMarker({
    map: map,
    geometries: [{ position: new TMap.LatLng(data.lat, data.lng) }],
  });
};

/**
 * 逆地址解析
 * @param e 待解析经纬度
 */
const getAddress = (e: any) => {
  return new Promise((resolve, reject) => {
    const geocoder = new TMap.service.Geocoder(); // 新建一个正逆地址解析类
    const location = new TMap.LatLng(e.latLng.lat, e.latLng.lng);
    geocoder.getAddress({ location: location }).then((res: any) => {
      if (res.status === 0) {
        state.infoWindow.open();
        state.infoWindow.setPosition(e.latLng); // 设置信息窗位置
        state.infoWindow.setContent(res.result.address); // 设置信息窗内容
        result.address = res.result.address;
        resolve(result);
      }
    });
  });
};

const mapInit = (callback, arr) => {
  const TMap = (window as any).TMap;
  let gcjLatLng = null;
  //获取当前的位置信息
  if (arr && Array.isArray(arr) && arr.length > 0) {
    // console.log("arr", arr);
    gcjLatLng = coordtransform.wgs84togcj02(arr[0], arr[1]);
  } else {
    // 转换为 GCJ-02 坐标
    gcjLatLng = coordtransform.wgs84togcj02(
      31.20929040462313,
      107.46796970075786
    );
  }
  // 创建 Tencent Maps LatLng 对象
  const center = new TMap.LatLng(gcjLatLng[0], gcjLatLng[1]);
  let el = document.getElementById("container")
  if(!el){return}
  map = new TMap.Map(el, {
    center: center, // 设置地图中心点坐标
    zoom:14, // 设置地图缩放级别
    viewMode: "3D",
  });


  addImgMarker(center);
  // 监听地图点击事件
  map.on("click", (e: any) => {
    // 清除点标记
    state.marker.setMap(null);
    // 关闭信息窗关闭
    state.infoWindow.close();
    state.marker = null;
    // 添加点标记
    addImgMarker(e.latLng);
    // 地址解析
    //获取点击处的经纬度
    result.lat = e.latLng.lat;
    result.lng = e.latLng.lng;
    getAddress(e).then((r) => {
      callback(result);
    });
  });

  // 初始化infoWindow
  state.infoWindow = new TMap.InfoWindow({
    map: map,
    position: center,
    offset: { x: 0, y: -32 }, // 设置信息窗相对position偏移像素
  });
  // 初始关闭信息窗关闭
  state.infoWindow.close();
};

export default mapInit;
